//JS编译任务脚本

import gulp from 'gulp';  //因为整个构建都是在gulp的基础之上的
import gulpif from 'gulp-if'; //gulp中做if判断的
import concat from 'gulp-concat'; //做文件拼接的
import webpack from 'webpack';
import gulpWebpack from 'webpack-stream'; //gulp是基于流处理的
import named from 'vinyl-named';  //对文件重命名做标志的
import livereload from 'gulp-livereload'; //自动刷新的，热更新
import plumber from 'gulp-plumber'; //处理文件信息流的
import rename from 'gulp-rename'; //对文件重命名
import uglify from 'gulp-uglify';//用来处理js压缩和css压缩的
import {log,colors} from 'gulp-util'; //命令行输出的包
import args from './util/args'; //刚自己写好的，对命令行参数进行解析的包

gulp.task('scripts',()=>{   //task是gulp提供的api，用来创建一个任务
  return gulp.src(['app/js/index.js'])  //.src是gulp提供的api
    .pipe(plumber({   //改变默认处理错误的机制，集中处理错误，这个plumber就是上面那个'gulp-plumber'
      errorHandle:function(){

      }
    }))
    .pipe(named())  //重命名文件
    .pipe(gulpWebpack({ //webpack对js进行编辑
      module:{
        loaders:[{
          test:/\.js$/,
          loader:'babel-loader'  //遇到匹配上面的形式的文件时，用babel去处理。webpack2.0貌似不支持缩写了--不能只写'babel'
        }]
      }
    }),null,(err,stats)=>{  //处理错误的情况
      log(`Finished '${colors.cyan('scripts')}'`,stats.toString({
        chunks:false
      }))
    })
    .pipe(gulp.dest('server/public/js'))  //dest,指定文件编译完后的放置路径
    .pipe(rename({  //rename进行重命名
      basename:'cp',
      extname:'.min.js' //即压缩后，那个名字叫“cp.min.js”
    })) //下面是：压缩
    .pipe(uglify({compress:{properties:false},output:{'quote_keys':true}}))
    .pipe(gulp.dest('server/public/js'))  //dest,指定文件编译完后的放置路径
    .pipe(gulpif(args.watch,livereload()))  //进行监听，热更新。这里：如果命令行有watch这个参数选项的话，就执行热更新，如果没有，就不会对文件进行监听和热刷新了
})
